package com.syg.servlet12_JDBC;

import com.syg.toolkit.JDBCKit;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class _02_JDBC {
    public static void main(String[] args) throws SQLException {
        /**
         * 1,查找
         */
        ResultSet rt = query("select * from tbl_huishangyoucai");
        while(rt.next()){
            System.out.println(rt.getString(2));
        }

        /**
         * 2,插入数据
         */
       /* int lineNumber = insert("insert into tbl_huishangyoucai(huishang_id,bankcode,custno) values(10,'3005',963258)");
        if(lineNumber>0){
            System.out.println("插入成功");
        }*/
        /**
         * 3,删除数据
         */
        /*int lineNumber = delete("delete from tbl_huishangyoucai where huishang_id = '10'");
        if(lineNumber>0){
            System.out.println("删除成功");
        }*/
        int lineNumber = update("update tbl_huishangyoucai set bankcode = '王五' where huishang_id = '5'");
        if (lineNumber>0){
            System.out.println("更新成功");
        }
    }

    /**
     * 1,查找
     */
    public static ResultSet query(String sql) throws SQLException {
        Connection con = JDBCKit.getConnection();
        Statement st = con.createStatement();
        ResultSet rt = st.executeQuery(sql);
        //JDBCKit.release(con,st,rt);//这样写提示结果集已耗尽
        return rt;//这样将结果集作为对象返回会占用系统资源
    }

    /**
     * 2,增加
     */
    public static int insert(String sql) throws SQLException {
        Connection con = JDBCKit.getConnection();
        Statement st = con.createStatement();
        //JDBCKit.release(con,st,rt);//这个参数如果是动态的就好了,因为我这里不需要结果集对象
        //JDBCKit.releaseVariable(con,st);//在这里释放资源会提示关闭的语句
        return st.executeUpdate(sql);//这样返回会占用系统资源
    }

    /**
     * 3,删除
     * @param sql
     * @return
     * @throws SQLException
     */
    public static int delete(String sql) throws SQLException {
        Connection con = JDBCKit.getConnection();
        Statement st = con.createStatement();
        int lineNumber = st.executeUpdate(sql);
        JDBCKit.releaseVariable(con,st);
        return lineNumber;//这样写即可解决方法2中的问题
    }

    /**
     * 4,更新
     * @param sql
     * @return
     * @throws SQLException
     */
    public static int update(String sql) throws SQLException {
        Connection con = JDBCKit.getConnection();
        Statement st = con.createStatement();
        int lineNumber = st.executeUpdate(sql);
        JDBCKit.releaseVariable(con,st);
        return lineNumber;
    }

    /**
     * 5,总结：观察上面的方法可知:更新,删除,增加的方法可以共用
     * @param sql
     * @return
     * @throws SQLException
     */
    public static int crud(String sql) throws SQLException {
        Connection con = JDBCKit.getConnection();
        Statement st = con.createStatement();
        int lineNumber = st.executeUpdate(sql);
        JDBCKit.releaseVariable(con,st);
        return lineNumber;
    }
}
